package com.lagou.client;

import com.lagou.model.User;
import com.lagou.model.UserMessage;

import java.io.IOException;

/**
 * 编程for 实现客户端的主界面绘制和相应功能的实现
 */
public class ClientView {

    /**
     * 为了可以使用输入输出流，采用合成服用原则实现
     */
    private ClientInitClose cic;

    /**
     * 通过构造方法实现成员变量的初始化
     * @param cic
     */
    public ClientView(ClientInitClose cic) {
        this.cic = cic;
    }

    /**
     * 自定义成员方法实现客户端主界面绘制
     */
    public void clientMainPage() throws IOException, ClassNotFoundException {
        while(true) {
            System.out.println("  \n\n\t\t在线考试系统");
            System.out.println("--------------------------");
            System.out.print("   [1] 学员系统");
            System.out.println("     [2] 管理员系统");
            System.out.println("   [0] 退出系统");
            System.out.println("请选择要进行的业务编号：");
            //Scanner sc = new Scanner(System.in);
            //int choose = sc.nextInt();
            int choose = ClientScanner.getScanner().nextInt();
            switch (choose) {
                case 1:
                    clientUserLogin();
                    //System.out.println("正在进入学员系统...");
                    break;
                case 2:
                    clientManagerLogin();
                    //System.out.println("正在进入管理员系统...");
                    break;
                case 0:
                    System.out.println("正在退出系统...");
                    clientExit();
                    return;
                default:
                    System.out.println("输入错误，请重新选择输入!");
            }
        }
    }


    private void clientSetting(User user) throws IOException, ClassNotFoundException {
        // 1.准备管理员登录的相关数据
        // todo 重复输入密码 正则校验
        System.out.println("请输入修改之后的密码：");
        String password = ClientScanner.getScanner().next();
        user.setPassWord(password);
        UserMessage tum = new UserMessage("modifyPassword", user);

        // 2.将UserMessage类型的对象通过对象输出流发给服务器
        cic.getOos().writeObject(tum);
        System.out.println("客户端发送修改密码信息请求成功！");
        cic.getOos().reset();
        // 3.接受服务器的处理结果，并给出提示
        tum = (UserMessage) cic.getOis().readObject();
        if ("success".equals(tum.getType())) {
            System.out.println("修改密码成功，下次请使用新密码登录！");
        } else {
            System.out.println("修改失败！");
        }
    }


    private void clientExit() throws IOException, ClassNotFoundException {

        UserMessage tum = new UserMessage("byebye", null);
        // 2.将UserMessage类型的对象通过对象输出流发给服务器
        cic.getOos().writeObject(tum);
        System.out.println("客户端发送退出系统信息请求成功！");
        cic.getOos().reset();
        // 3.接受服务器的处理结果，并给出提示
        tum = (UserMessage) cic.getOis().readObject();
        if ("success".equals(tum.getType())) {
            System.out.println("请求退出成功");
        } else {
            System.out.println("退出异常，强制退出");
        }
    }

    /**
     * 自定义成员方法实现客户端，用户登录的功能。
     */
    private void clientUserLogin() throws IOException, ClassNotFoundException {
        // 1.准备用户登录的相关数据
        System.out.println("请输入学员的账户信息：");
        String userName = ClientScanner.getScanner().next();
        System.out.println("请输入学员的密码信息：");
        String password = ClientScanner.getScanner().next();
        User user = new User(userName, password);
        UserMessage tum = new UserMessage("userCheck", user);


        // 2.将UserMessage类型的对象通过对象输出流发给服务器
        cic.getOos().writeObject(tum);
        System.out.println("客户端发送学员账户信息成功！");
        cic.getOos().reset();
        // 3.接受服务器的处理结果，并给出提示
        tum = (UserMessage) cic.getOis().readObject();
        if ("success".equals(tum.getType())) {
            System.out.println("登录成功，欢迎使用！");
            while(true) {
                System.out.println("  \n\n\t\t学员系统");
                System.out.println("--------------------------");
                System.out.print("   [1] 考试系统");
                System.out.println("     [2] 修改密码");
                System.out.println("   [0] 返回上级菜单");
                System.out.println("请选择要进行的业务编号：");
                //Scanner sc = new Scanner(System.in);
                //int choose = sc.nextInt();
                int choose = ClientScanner.getScanner().nextInt();
                switch (choose) {
                    case 1:
                        System.out.println("正在进入考试系统...");
                        break;
                    case 2:
                        clientSetting(user);
                        //System.out.println("正在进入个人信息系统...");
                        break;
                    case 0:
                        System.out.println("正在返回上级菜单...");
                        return;
                    default:
                        System.out.println("输入错误，请重新选择输入!");
                }
            }


        } else {
            System.out.println("用户名或者密码错误！");
        }

    }

    /**
     * 自定义成员方法实现客户端，管理员登录的功能。
     */
    private void clientManagerLogin() throws IOException, ClassNotFoundException {
        // 1.准备管理员登录的相关数据
        System.out.println("请输入管理员的账户信息：");
        String userName = ClientScanner.getScanner().next();
        System.out.println("请输入管理员的密码信息：");
        String password = ClientScanner.getScanner().next();
        UserMessage tum = new UserMessage("managerCheck", new User(userName, password));

        // 2.将UserMessage类型的对象通过对象输出流发给服务器
        cic.getOos().writeObject(tum);
        System.out.println("客户端发送管理员账户信息成功！");
        cic.getOos().reset();
        // 3.接受服务器的处理结果，并给出提示
        tum = (UserMessage) cic.getOis().readObject();
        if ("success".equals(tum.getType())) {
            System.out.println("登录成功，欢迎使用！");
            // 对学员增删查改
            while(true) {
                System.out.println("  \n\n\t\t学员管理系统");
                System.out.println("--------------------------");
                System.out.print("   [1] 添加学员");
                System.out.println("     [2] 删除学员");
                System.out.print("   [3] 查找学员");
                System.out.println("     [4] 修改学员");
                System.out.println("   [0] 返回上级菜单");
                System.out.println("请选择要进行的业务编号：");
                int choose = ClientScanner.getScanner().nextInt();
                switch (choose) {
                    case 1:
                        clientAdminAddUser();
                        break;
                    case 2:
                        clientAdminDelUser();
                        break;
                    case 3:
                        clientAdminFindUser();
                        break;
                    case 4:
                        clientAdminModUser();
                        break;
                    case 0:
                        System.out.println("正在返回上级菜单...");
                        return;
                    default:
                        System.out.println("输入错误，请重新选择输入!");
                }
            }


        } else {
            System.out.println("用户名或者密码错误！");
        }
    }

    private void clientAdminAddUser() throws IOException, ClassNotFoundException {
        // 1.准备管理员登录的相关数据
        System.out.println("请输入需要添加的学员账户信息：");
        String userName = ClientScanner.getScanner().next();
        System.out.println("请输入需要添加的学员的密码信息：");
        String password = ClientScanner.getScanner().next();
        UserMessage tum = new UserMessage("addUser", new User(userName, password));

        // 2.将UserMessage类型的对象通过对象输出流发给服务器
        cic.getOos().writeObject(tum);
        System.out.println("客户端发送添加学员信息成功！");

        // 3.接受服务器的处理结果，并给出提示
        tum = (UserMessage) cic.getOis().readObject();
        if ("success".equals(tum.getType())) {
            System.out.println("添加学员成功！");
        } else {
            System.out.println("输入有误！" + tum.getErrMsg());
        }
    }

    private void clientAdminDelUser() throws IOException, ClassNotFoundException {
        // 1.准备管理员登录的相关数据
        System.out.println("请输入需要删除的学员账户信息：");
        String userName = ClientScanner.getScanner().next();
        System.out.println("请输入需要删除的学员的密码信息：");
        String password = ClientScanner.getScanner().next();
        UserMessage tum = new UserMessage("delUser", new User(userName, password));

        // 2.将UserMessage类型的对象通过对象输出流发给服务器
        cic.getOos().writeObject(tum);
        System.out.println("客户端发送删除学员信息成功！");
        cic.getOos().reset();
        // 3.接受服务器的处理结果，并给出提示
        tum = (UserMessage) cic.getOis().readObject();
        if ("success".equals(tum.getType())) {
            System.out.println("删除学员成功！");
        } else {
            System.out.println("输入有误！" + tum.getErrMsg());
        }
    }

    private void clientAdminFindUser() throws IOException, ClassNotFoundException {
        // 1.准备管理员登录的相关数据
        System.out.println("请输入需要查找的学员账户信息：");
        String userName = ClientScanner.getScanner().next();
        UserMessage tum = new UserMessage("findUser", new User(userName, null));

        // 2.将UserMessage类型的对象通过对象输出流发给服务器
        cic.getOos().writeObject(tum);
        System.out.println("客户端发送查找学员信息成功！");
        cic.getOos().reset();
        // 3.接受服务器的处理结果，并给出提示
        tum = (UserMessage) cic.getOis().readObject();
        if ("success".equals(tum.getType())) {
            System.out.println("查找学员成功！" + tum.getUser());
        } else {
            System.out.println("输入有误！" + tum.getErrMsg());
        }
    }

    private void clientAdminModUser() throws IOException, ClassNotFoundException {
        // 1.准备管理员登录的相关数据
        System.out.println("请输入需要修改的学员账户信息：");
        String userName = ClientScanner.getScanner().next();
        System.out.println("请输入需要修改的学员的密码信息：");
        String password = ClientScanner.getScanner().next();
        UserMessage tum = new UserMessage("modUser", new User(userName, password));

        // 2.将UserMessage类型的对象通过对象输出流发给服务器
        cic.getOos().writeObject(tum);
        System.out.println("客户端发送修改学员信息成功！");
        cic.getOos().reset();
        // 3.接受服务器的处理结果，并给出提示
        tum = (UserMessage) cic.getOis().readObject();
        if ("success".equals(tum.getType())) {
            System.out.println("修改学员成功！");
        } else {
            System.out.println("输入有误！" + tum.getErrMsg());
        }
    }

}
